# scrapy 框架
# 什么是框架？
#       集成了很多功能，并且具有很强通用性的项目模板。

# 如何学习框架？
#       专门学习框架封装的各种功能的详细用法。
#

# 什么是 scrapy ？
#       爬虫中封装的明星框架。
#       功能：高性能的持久化存储，异步的数据下载，高性能的数据解析操作，分布式。

# scrapy 框架的基本使用
#       看看网站，找对应版本：python3.11安装scrapy问题及解决方案：https://blog.csdn.net/mqwguardain/article/details/128868081
#       环境的安装：
#           - pip install wheel
#           - 下载 twisted，下载地址为 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
#           - 安装 twisted: pip install Twisted-17.1.0-cp36-cp36m-win_amd64.whl
#           - pip install pywin32
#           - pip install scrapy
#       测试：在终端里录入 scrapy 指令，没有报错即表示安装成功！

# 创建工程
# 01. 在目标目录下，创建一个 scrapy 工程：    scrapy startproject xxxPro
# 02. cd xxxPro
# 03. 在 spiders 子目录中，创建一个爬虫文件： scrapy genspider spiderName www.xxx.com
# 04. 执行工程：scrapy crawl spiderName (--nolog 没有日志输出属性)

# scrapy 数据解析
# scrapy 持久化存储
#       - 基于终端命令：
#               - 要求：只可以将 parse 方法的返回值存储到本地的文本文件中
#               - 注意：持久化村粗对应的文本文件的类型只可以为：'json', 'jsonlines', 'jl', 'csv', 'xml'
#               - 指令：scrapy crawl xxx项目名 -o filePath
#               - 好处：简洁高效便捷
#               - 缺点：局限性比较强（数据只可以存储到指定的后缀文本文件中）
#
#       - 基于管道：
#               - 编码流程
#                   - 数据解析
#                       - 在 item 类中定义相关的属性
#                       - 将解析的数据封装存储到 item 类型的对象
#                       - 将 item 类型的对象提交给管道进行持久化存储的操作
#                       - 在管道类的 process_item 中要将其接收到的 item 对象中存储的数据进行持久化存储操作
#                       - 在配置文件中开启管道
#                   - 好处：
#                       - 通用性强

# 基于 Spider 的全站数据爬取
#       - 就是将网站中的某一个板块下的全部页码对应的页面数据进行爬取
#       - 需求：爬取网站中的照片名称
#       - 实现方式：
#           - 将所有页面的 url 添加到 start_urls 列表（不推荐）
#           - 自行手动进行请求发送（推荐）
#               - 手动请求发送
#                   - yield scrapy.Request(url, callback):callback 专门用作于数据解析

# 五大核心组件
#   - 调度器（Scheduler）：用来接收引擎发过来的请求，压入队列中，并在引擎再次请求的时候返回，可以想象成一个url（抓取网页的网址或者说是链接）的优先队列，由它来决定下一个要抓取的网址是什么，同事去除重复的网址。
#   - 引擎(Sxrapy)：用来处理整个系统的数据流处理，触发事务（框架核心）
#   - 爬虫（Spiders）：爬虫是主要干活儿的，用于从特定的网页中提取自己需要的信息，即所谓的实体（Item）。用户也可以从中提取出链接，让Scrapy继续抓取下一个页面。
#   - 管道（Pipeline）：负责处理爬虫从网页中抽取的实体，主要的功能是持久化实体、验证实体的有效性】、清楚不需要的信息。当页面被爬虫解析后，将被发送到项目管道，并经过几个特定的次序处理数据。
#   - 下载器（Downloader）：用于下载网页内容返回给 Scrapy （Scrapy 下载器是建立在 twisted 这个高校的异步模型上的）

# 请求传参
#   - 使用场景：如果爬取解析的数据不在同一张页面中。（深度爬取）
#   - 需求：爬取 Boss 的岗位名称、岗位描述

# 图片数据爬取之 ImagesPipeline
#   - 基于 scrapy 爬取字符串类型的数据和爬取图片类型的数据区别？
#       - 字符串：只需要基于 xpath 进行解析且提交管道进行持久化存储
#       - 图片：xpath 解析出图片 src 的属性值。单独的对图片地址发起请求获取图片二进制类型的数据
#   - ImagesPipeline：
#       - 只需要将 img 的src 的属性值进行解析，提交到管道，就会对图片的 src 进行请求发送，获取图片的二进制类型的数据，且哈辉帮我们进行持久化存储。
#   - 使用流程：
#





